package com.gang.mars.basic.iterable.demo1;

import org.omg.CORBA.Object;

import java.util.Iterator;
import java.util.Spliterator;
import java.util.function.Consumer;

/**
 * @author gang.chen
 * @description 业务意义，自定义迭代器
 * @Date 2021/7/12 10:43
 */
public class IterableDemoTest {
    /**
     * 测试功能
     * */
    public static void main(String[] args) {

    }

    /**
     * 定义所属自己的可迭代类，并将其实现
     * */
    class MyIterable<T> implements Iterable<T>
    {
        //定义任意类型的数组，业务意义，存储给定任意类型的数据
        private T[] elementData;

        //业务意义 TODO
        private int index;

        //业务意义，初始化数组长度
        public MyIterable(int capacity) {
            this.index = 0;
            this.elementData = (T[]) new Object[capacity];
        }

        public void add(T t){
            elementData[index++] = t;
        }

        /**
         * 业务意义，获取一个迭代器对象
         * */
        @Override
        public Iterator<T> iterator() {
            return new MyIterator();
        }

        @Override
        public void forEach(Consumer<? super T> action) {

        }

        @Override
        public Spliterator<T> spliterator() {
            return null;
        }

        /**
         * 业务意义，创建所属自己的替代器类
         * */
        class MyIterator implements Iterator<T> {

            private int cursor;

            public MyIterator() {
                this.cursor = 0;
            }

            @Override
            public boolean hasNext() {
                return cursor<index;
            }
            @Override
            public T next() {
                return  elementData[cursor++];
            }
        }
    }




}
